package com.yuhs.zixing.study.multithread.mashibing.t001base.t004.method;

import lombok.SneakyThrows;
import lombok.extern.slf4j.Slf4j;

import java.util.concurrent.TimeUnit;

/**
 * Function: 线程方法 001 Yield
 * yield 就是当前线程正在执行的时候停下来进入等待队列
 * 也有可能CPU继续执行你这个线程；更大可能是执行其他等待的线程
 * yield 就是让出下cpu执行权，至于能不能抢到就不管了。
 *
 * @Author yuhongsheng
 * @Date: 2023-12-18 22:25:17
 */
@Slf4j
public class ThreadMethod002Yield {


    public static void main(String[] args) {
        testYield();
    }

    private static void testYield() {
        new Thread(ThreadMethod002Yield::run1).start();
        new Thread(ThreadMethod002Yield::run2).start();
    }

    @SneakyThrows
    private static void run2() {
        for (int i = 0; i < 10; i++) {
            log.atInfo().log("测试Yield 方法Run2 {}", i);
            if (i % 2 == 0) {
                Thread.yield();
                TimeUnit.SECONDS.sleep(1);
            }
        }
    }


    private static void run1() {
        for (int i = 0; i < 10; i++) {
            log.atInfo().log("测试Yield 方法Run1 {}", i);
            if (i % 2 != 0) {
                Thread.yield();
            }
        }

    }


}
